The present invention is generally directed to a remoting client for use within a desktop virtualization environment (commonly referred to as virtual desktop infrastructure or VDI). In particular, the present invention is directed to a remoting client that is configured to offload various graphics-based remoting protocol processes to a graphics processing unit (GPU).
In a desktop virtualization environment, a desktop is hosted on a server but is made accessible on a client terminal by sending the desktop's graphical output to the client terminal for display. In this specification and the claims, the term “remoting” will be used to refer to this process of virtualizing a desktop on a client terminal. Remoting can be accomplished using a number of available protocols including ICA, RDP, VNC, PCoIP, etc. A remoting client executing on a client terminal can employ a remoting protocol to communicate with a corresponding remoting service executing on the server.
Regardless of the specific remoting protocol that is employed, the remoting service will send communications to the remoting client containing graphics display data and the remoting client will employ this graphics display data to render the desktop for display on the client terminal. In many cases, a large amount of processing must be performed by the remoting client to receive and handle these communications as well as to perform the other remoting tasks/processes. For example, the remoting protocol may employ encryption and/or compression techniques on all communications transferred to the remoting client. The remoting client may therefore need to decrypt and decompress any communication in order to identify the contents of the communication. Additionally, in many implementations, the contents of the communications may be graphics display data that is encoded. In such cases, the remoting client will be tasked with decoding the graphics display data to allow it to be displayed. Furthermore, in some implementations, there may be multiple different streams of communications that contain graphics display data (e.g., video data may be transported over one virtual channel while regular graphics data or cursor update data may be transmitted over another virtual channel) which can increase the amount of processing required to fully update the display of the desktop on the client side. In short, a remoting client typically must perform a substantial amount of processing to virtualize a desktop on the client terminal which can place a significant burden on the CPU.
It is becoming increasingly common to employ a VDI environment in corporate and other settings since it allows low cost client terminals (e.g., thin or zero clients) to be employed. However, these low cost client terminals oftentimes have CPUs with reduced processing power. In many cases, the CPUs on these low cost client terminals may not be capable of handling the load associated with virtualizing a desktop that provides a rich graphics experience. In particular, when graphics display data is transferred in an encoded format, the CPU may become overloaded during the decoding process which may cause the display to be updated less frequently than is desired, may cause keyboard and mouse input to lag, and/or may cause other performance issues.